import { useRobotStore } from '@/stores/robotStore';
import { useROSConnection } from '@/composables/useROSConnection';

/**
 * 摇杆控制 Composable
 * 处理摇杆输入和机器人运动控制逻辑
 */
export function useJoystickControl(rosConnection = null) {
  const robotStore = useRobotStore();
  
  // 如果没有传入rosConnection，则创建一个新的实例
  if (!rosConnection) {
    rosConnection = useROSConnection();
  }

  /**
   * 处理移动摇杆事件
   * @param {Object} params - 摇杆参数
   * @param {number} params.x - X轴值 (-1 到 1)
   * @param {number} params.y - Y轴值 (-1 到 1)
   */
  const onMoveJoystick = ({ x, y }) => {
    // 更新UI显示的运动状态
    robotStore.updateMovement(x, y, robotStore.rotateX);
    
    // 计算实际速度：支持全向移动
    const linearX = -y * robotStore.maxLinear;   // Y轴控制前进/后退
    const linearY = -x * robotStore.maxLinear;   // X轴控制左右移动
    
    
    // 发布速度命令
    rosConnection.publishVelocityWithY(linearX, linearY, 0);
  };

  /**
   * 处理移动摇杆结束事件
   */
  const onMoveEnd = () => {
    // 停止移动
    robotStore.updateMovement(0, 0, robotStore.rotateX);
    rosConnection.publishVelocityWithY(0, 0, 0);
  };

  /**
   * 处理旋转摇杆事件
   * @param {Object} params - 摇杆参数
   * @param {number} params.x - X轴值 (-1 到 1)
   */
  const onRotateJoystick = ({ x }) => {
    // 更新UI显示的旋转状态
    robotStore.updateMovement(robotStore.moveX, robotStore.moveY, x);
    
    // 计算旋转速度：只控制原地旋转
    const angularSpeed = -x * robotStore.maxAngular;
    
    // 发布旋转命令
    rosConnection.publishVelocityWithY(0, 0, angularSpeed);
  };

  /**
   * 处理旋转摇杆结束事件
   */
  const onRotateEnd = () => {
    // 停止旋转
    robotStore.updateMovement(robotStore.moveX, robotStore.moveY, 0);
    rosConnection.publishVelocityWithY(0, 0, 0);
  };

  return {
    // 移动控制
    onMoveJoystick,
    onMoveEnd,
    
    // 旋转控制
    onRotateJoystick,
    onRotateEnd,
    
    // 状态访问
    moveX: robotStore.moveX,
    moveY: robotStore.moveY,
    rotateX: robotStore.rotateX,
    linearSpeed: robotStore.linearSpeed,
    angularSpeed: robotStore.angularSpeed
  };
}
